/*
 * @Author: spring
 * @version:
 * @Date: 2022-09-07 09:26:11
 * @LastEditors: spring
 * @LastEditTime: 2022-09-07 16:11:31
 * @Descripttion:
 */

#ifndef _COM_TCP_H_
#define _COM_TCP_H_
#include <stdbool.h>
#include "Com_format.h"
/**
 * @msg: 获取 客户端 通信套接字
 * @param {char} *ip
 * @param {int} port
 * @return {*} 返回通信套接字，失败返回-1
 */
int getSocketfd(const char *ip, int port);

/**
 * @msg: 发送第一个标识信号
 * @param {int} 连接套接字
 * @return {*} 成功返回true，失败返回false
 */
bool firstsignal(int sockfd);


/**
 * @msg:指令发送
 * @param {int} sockfd 连接套接字
 * @param {char} *COM 封装后的指令
 * @return {*} 成功返回 1 ； 失败返回 -1
 */
int datasend(int sockfd,const char *COM);

/**
 * @msg:读取指令
 * @param {int} sockfd 连接套接字
 * @param {char} *COM 读取到的指令
 * @return {*} 成功返回 1 ； 失败返回 -1
 */
int datarecv(int sockfd,char **COM);

/**
 * @msg: 小车行动封装 封装 命令数据到帧中。 帧由该函数开辟new 空间，出来需要外部释放。
 * @param {activate_car} data:数据结构体
 * @param {char} * & 封装之后的命令。
 * @return {*} 成功返回true 失败返回false
 */
bool packCmdData_activate_car(const struct activate_car data, char **COM);

/**
 * @msg:小车环境信息封装
 * @param {activate_car} data
 * @param {char} *
 * @return {*}
 */
bool packCmdData_car_info(const struct car_info data, char **COM);

/**
 * @msg:喇叭命令封装
 * @param {trumpet} data
 * @param {char} *
 * @return {*}
 */
bool packCmdData_trumpet(const struct trumpet data, char **COM);

/**
 * @msg:摄像头数据封装
 * @param {trumpet} data
 * @param {char} *
 * @return {*}
 */
bool packCmdData_cam_t(const struct cam_t data, char **COM);

/**
 * @msg: 解析命令头
 * @param {activate_car} &data 保存解析后的数据
 * @param {char} *COM 传指令
 * @return {*}成功返回 true，失败返回false
 */
bool unPackCmdHead(struct head *data,const char *COM);


/**
 * @msg: 解析，帧中数据放到data中。
 * @param {activate_car} &data
 * @param {char} *COM
 * @return {*}成功返回 true，失败返回false
 */
bool unPackCmdData_activate_car(volatile struct activate_car *data, const char *COM);

/**
 * @msg:
 * @param {car_behavior} &data
 * @param {char} *COM
 * @return {*}
 */
bool unPackCmdData_car_info(struct car_info *data, const char *COM);

/**
 * @msg:
 * @param {trumpet} &data
 * @param {char} *COM
 * @return {*}
 */
bool unPackCmdData_trumpet(volatile struct trumpet *data, const char *COM);

/**
 * @msg:摄像头数据解析
 * @param {trumpet} data
 * @param {char} *
 * @return {*}
 */
bool unpackCmdData_cam_t(struct cam_t *data,const char *COM);

#endif
//_COM_TCP_H_
